import re

from django.shortcuts import render, redirect
# from django.views import View
# Create your views here.
from django.urls import reverse
from django.views import View
from django import http

from apps.users.models import User
from apps.views import logger

"""
功能点如何分析：
    １.需要依靠经验
    ２.看其他网站的类似功能　
注册页面的功能点：
    １.用户名：
        不能重复
        有长度限制
    ２.密码：
        有长度限制
        数字和字母
    ３.确认密码：
        需要和密码一致
    ４.手机号
        符合要求
        不能重复
    5.图片验证码
        后台实现
        作用：区分人和计算机的
        服务于：短信验证码（发送短信）
    ６.短信验证码
        后台实现
        发送短信前先验证　图片验证码
    ７.用户点击注册按钮的时候
        必须保存：用户名，密码和手机号
        原因：我们在登录的时候需要使用这三个字段
    ８.同意按钮
        需要点击同意





"""


class RegisterView(View):
    def get(self,request):
        return render(request,'register.html')
    def post(self,request):
        # 具体实现的思路(步骤)
        # ①接收数据request.POST
        data=request.POST
        # ②分别获取数据username, password
        username=data.get('username')
        password=data.get('password')
        password2=data.get('password2')
        mobile=data.get('mobile')
        allow=data.get('allow')
        # ③判断要求的数据是否齐全[少参数就没有必要继续验证了]
        if  not all([username,password,password2,mobile,allow]):
            # from django import http
            return http.HttpResponseBadRequest('参数不全')
        # ④验证用户名
        if not re.match(r'^[0-9a-zA-Z_-]{5,20}$',username):

            return http.HttpResponseBadRequest('用户名不满足条件')
        # ⑤验证密码
        if not re.match(r'^[0-9A-Za-z]{8,20}$',password):
            return http.HttpResponseBadRequest('密码格式不正确')
        # ⑥验证确认密码
        if password2!=password:
            return http.HttpResponseBadRequest('密码不一致')
        # ⑦验证手机号
        if not re.match(r'^1[3-9]\d{9}$',mobile):
            return http.HttpResponseBadRequest('手机号不符合规则')

        # ⑧验证是否同意协议
        if allow != 'on':
            return http.HttpResponseBadRequest('您未同意协议')
        # ⑨保存数据　，　我们要把数据保存到数据库中
        try:
            # create_user  是系统提供测　自动对密码进行加密的方法，同事也会创建用户
            user = User.objects.create_user(
                username=username,
                password=password,
                mobile=mobile
            )
        except Exception as e:
            logger.error(e)
            return render(request,'register.html',context={'register_errmsg':'创建用户失败'})
        # ⑩跳转首页, 返回相应
        return redirect(reverse("contents:index"))
        # return http.HttpResponse('ok')
